package com.stadyhelper.Utils;

import io.github.briqt.spark4j.SparkClient;
import io.github.briqt.spark4j.constant.SparkApiVersion;
import io.github.briqt.spark4j.model.SparkMessage;
import io.github.briqt.spark4j.model.SparkSyncChatResponse;
import io.github.briqt.spark4j.model.request.SparkRequest;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
public class SparkManagerUtil {
    @Resource
    private SparkClient sparkClient;

    /**
     * AI生成问题的预设条件
     */
    public static final String PRECONDITION = "我是一名高中生，请你对我的考试成绩做一个简单的分析与总结，接下来请你按照以下固定格式给我提供内容：\n" +
            "同学你好，我是你的个人成绩分析师小余，接下来将由我为你分析你的成绩：\n" +
            "{语文数学英语的满分为150分，物理化学生物的满分为100分，不要在回答中告诉我满分\n}"+
            "{明确的数据分析结论，越精简越好，不要生成多余的注释,不要添加多余的符号，尽量注意文字的格式，分点回答，不要将格式条件加在回答中\n}"+
            "{为我的成绩评定一个等级，等级在完美，优秀，良好，及格，不及格中选一个\n}"+
            "{将其加在回答的末尾，格式为，本次你成绩的评级为：}";

    /**
     * 向星火AI发送请求
     *
     * @param content
     * @return
     */
    public String sendMesToAIUseXingHuo(final String content) {
        // 消息列表，可以在此列表添加历史对话记录
        List<SparkMessage> messages = new ArrayList<>();
        messages.add(SparkMessage.systemContent(PRECONDITION));
        messages.add(SparkMessage.userContent(content));
        // 构造请求
        SparkRequest sparkRequest = SparkRequest.builder()
                // 消息列表
                .messages(messages)
                // 模型回答的tokens的最大长度，非必传，默认为2048
                .maxTokens(2048)
                // 结果随机性，取值越高随机性越强，即相同的问题得到的不同答案的可能性越高，非必传，取值为[0,1]，默认为0.5
                .temperature(0.2)
                // 指定请求版本
                .apiVersion(SparkApiVersion.V3_5)
                .build();
        // 同步调用
        SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest);
        String responseContent = chatResponse.getContent();
        log.info("星火AI返回的结果{}", responseContent);
        return responseContent;
    }
}

